﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using MMSA.Services.SharedServices;
using SmartProcess.Core.Commons.Tracing;

namespace MMSA.Services.Services
{
    public class ProductManagementService : IDataManagementService
    {
        private TracingService tracing = new TracingService("MMSA.Services");
        string traceServicio = string.Empty;
        public void MassiveProductUpload(string fileName, string fileExtension)
        {
            try
            {
                var dataTable = new DataTable("PED_PRODUCTO");

                traceServicio = "Antes de cargar desde archivo excel: " + fileName;

                dataTable.GetDataFromExcelSpreadsheet(fileName, fileExtension);
                MMSA.Entities.Product.PED_PRODUCTODataTable product = new Entities.Product.PED_PRODUCTODataTable();

                traceServicio = "Antes de recorrer las columnas de producto";
               
                foreach (DataRow item in dataTable.Rows)
                {
                    var row = product.NewPED_PRODUCTORow();
                    for (int i = 0; i < dataTable.Columns.Count; i++)
                    {
                        Boolean flag= true;
                        traceServicio = "Se cayo al leer la Columna: " +dataTable.Columns[i].ColumnName + " ,revise si el archivo subido pertenece al formato correcto.";
                        if (dataTable.Columns[i].ColumnName.Equals("pro_estado") ||
                            dataTable.Columns[i].ColumnName.Equals("pro_promociones") || 
                            dataTable.Columns[i].ColumnName.Equals("pro_activo"))
                        {
                            if (item[dataTable.Columns[i].ColumnName].Equals(1.0))
                            {
                                row[dataTable.Columns[i].ColumnName] = Convert.ChangeType(true,
                              product.Columns[dataTable.Columns[1].ColumnName].DataType);
                                flag = false;
                            }
                            else
                            {
                                if (item[dataTable.Columns[i].ColumnName].Equals("NULL"))
                                {
                                    flag = false;
                                    row[dataTable.Columns[i].ColumnName] = Convert.ChangeType(false,
                                    product.Columns[dataTable.Columns[1].ColumnName].DataType);

                                }
                                else {
                                    flag = false;
                                    row[dataTable.Columns[i].ColumnName] = Convert.ChangeType(false,
                                    product.Columns[dataTable.Columns[1].ColumnName].DataType);
                                }
                                
                            }
                                                                                }
                         if(flag){
                             if (item[dataTable.Columns[i].ColumnName].Equals("NULL"))
                             {
                                 if (dataTable.Columns[i].ColumnName.Equals("pro_id_agrup1") ||
                                     dataTable.Columns[i].ColumnName.Equals("pro_id_agrup2") ||
                                     dataTable.Columns[i].ColumnName.Equals("pro_id_agrup3") ||
                                     dataTable.Columns[i].ColumnName.Equals("pro_id_agrup4") || 
                                     dataTable.Columns[i].ColumnName.Equals("pro_id_caracteristica1")||
                                     dataTable.Columns[i].ColumnName.Equals("pro_id_caracteristica2")||
                                     dataTable.Columns[i].ColumnName.Equals("pro_id_caracteristica3")||
                                     dataTable.Columns[i].ColumnName.Equals("pro_id_caracteristica4")||
                                     dataTable.Columns[i].ColumnName.Equals("emp_id"))
                                 {
                                     row[dataTable.Columns[i].ColumnName] = Convert.ChangeType(0,
                                  product.Columns[dataTable.Columns[1].ColumnName].DataType);
                                 }
                                 else{
                                     row[dataTable.Columns[i].ColumnName] = Convert.ChangeType("",
                                      product.Columns[dataTable.Columns[1].ColumnName].DataType);
                                 }
                             }
                             else {
                                 row[dataTable.Columns[i].ColumnName] = Convert.ChangeType(item[dataTable.Columns[i].ColumnName],
                               product.Columns[dataTable.Columns[1].ColumnName].DataType);
                             
                             }
                         }
                       
                        
                        
                    }
                    product.AddPED_PRODUCTORow(row);
                }
                traceServicio = "Antes de generar el upsert de actualización e inserción.";
                product.Upsert("pro_id");
            }
            catch (Exception exception)
            {
                if (exception != null)
                    tracing.ErrorFormat("MMSA.Services.Services.ProductManagementService ==> TRACE: {0}, ==> ERROR: {1}, ==> STACKTRACE: {2}", traceServicio, exception.Message, exception.StackTrace);
                throw;
            }
        }

    }
}
